package com.leeue.api;


import com.google.common.util.concurrent.RateLimiter;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RestController;

import java.util.concurrent.TimeUnit;

/**
 * 学习 RateLimiter 框架 来实现令牌桶限流算法 小案例
 *
 * @author liyue
 * @date 2019-08-12 15:56
 */
@RestController
public class IndexOrderController {


    // 1.create 传入的参数表示 以每秒 的速度 在桶中 存入 1个令牌。 1r/s
    RateLimiter rateLimiter = RateLimiter.create(1);

    @GetMapping("/addOrder")
    public String addOrder() {
        //2、对接口进行限流，如果500毫秒没有获取到令牌就走降级处理
        boolean tryAcquire = rateLimiter.tryAcquire(500, TimeUnit.MILLISECONDS);
        if (!tryAcquire) {
            return "服务繁忙，请稍后再试！";
        }
        //走业务逻辑
        return "成功抢购!";

    }
}
